# 一个简单的 GraphQL API

schema.graphql
graphql 自带一组默认标量类型,包括 Int,Float,String,Boolean,ID。在定义字段时需要注明类型,这也是 graphql 的特点之一,是支持强类型的。如果非空,就在类型后面跟上一个!号。graphql 还包括枚举类型,列表和自定义类型。
type Hello {
id: ID!
name: String!
}
@前端进阶之旅: 代码已经复制到剪贴板
connector
编写完 schema 之后,graphql 知道有哪些数据了,但他还需要知道 “如何去取”, connector 的角色就在于此。 connector 的职责就是 “取数”, 他既可以调用 rpc 接口取数,又可以调用内置的 orm 插件去取数,还可以直接调用 egg 的 service。
export default class HelloConnector {
hellos() {
return [
{
id: 1,
name: 'Jack',
},
{
id: 2,
name: 'Lucy',
},
];
}
}
@前端进阶之旅: 代码已经复制到剪贴板
resolver
resolve.js是数据类型的具体实现,依赖connector.js完成。其实 resolver 非常简单,就是针对你暴露的查询接口,调用相应的connector去取数即可,如下:
export default {
Query: {
hellos(_root: any, {}, { connector }) {
return connector.hello.hellos();
},
},
};
@前端进阶之旅: 代码已经复制到剪贴板
定义 Query
新建一个 query 目录创建 schema.graphql 文件,大家也可以直接在各个模块下的 schema.graphql 文件中定义,纯属个人习惯
type Query {
hellos: [Hello!]
}
@前端进阶之旅: 代码已经复制到剪贴板
[Hello!] 可以理解为 [{id: 1, name: ‘jack’}, {id: 2, name: ‘praise’}] Hello! 可以理解为 {id: 1, name: ‘jack’}
项目启动
egg本地开发环境启动方式非常简单:
$ npm run dev
@前端进阶之旅: 代码已经复制到剪贴板
